package co.edu.udea.herbario.dao.cnf;

import co.edu.udea.herbario.dao.EjemplarDao;
import co.edu.udea.herbario.dao.EspecieDao;
import co.edu.udea.herbario.dao.FamiliaDao;
import co.edu.udea.herbario.dao.GeneroDao;
import co.edu.udea.herbario.dao.TipoDao;
import co.edu.udea.herbario.dao.ValoresTipoDao;
import co.edu.udea.herbario.dao.impl.EjemplarDaoImp;
import co.edu.udea.herbario.dao.impl.EspecieDaoImp;
import co.edu.udea.herbario.dao.impl.FamiliaDaoImp;
import co.edu.udea.herbario.dao.impl.GeneroDaoImp;
import co.edu.udea.herbario.dao.impl.TipoDaoImp;
import co.edu.udea.herbario.dao.impl.ValoresTipoDaoImp;

/**
 *
 * @author Alejandro Areiza, Lorena Orozco, Marcela Colorado
 */
public class FactoryDao
{
    //Atributo estatico del mismo tipo de la clase
    private static FactoryDao factory;

    //Constructor privado de la clase
    private FactoryDao(){ }

    /**
	 * Metodo que permite obtener una instancia de la clase
	 *
	 * @return retorna una instancia de la misma clase
	 */
    public static FactoryDao obtenerInstancia()
    {
        if(factory == null)
        {
            factory = new FactoryDao();
        }
        return factory;
    }

    /**
	 * Metodo que permite obtener un objeto de la clase EjemplarDaoImp
	 *
	 * @return retorna un objeto de la clase EjemplarDaoImp
	 */
    public EjemplarDao getEjemplarDao()
    {
        EjemplarDao ejemplar = new EjemplarDaoImp();
        return ejemplar;
    }

    /**
	 * Metodo que permite obtener un objeto de la clase EspecieDaoImp
	 *
	 * @return retorna un objeto de la clase EspecieDaoImp
	 */
    public EspecieDao getEspecieDao()
    {
        EspecieDao especie = new EspecieDaoImp();
        return especie;
    }

    /**
	 * Metodo que permite obtener un objeto de la clase GeneroDaoImp
	 *
	 * @return retorna un objeto de la clase GeneroDaoImp
	 */
    public GeneroDao getGeneroDao()
    {
        GeneroDao genero = new GeneroDaoImp();
        return genero;
    }

    /**
	 * Metodo que permite obtener un objeto de la clase FamiliaDaoImp
	 *
	 * @return retorna un objeto de la clase FamiliaDaoImp
	 */
    public FamiliaDao getFamiliaDao()
    {
        FamiliaDao familia = new FamiliaDaoImp();
        return familia;
    }

    /**
	 * Metodo que permite obtener un objeto de la clase TipoDaoImp
	 *
	 * @return retorna un objeto de la clase TipoDaoImp
	 */
    public TipoDao getTipoDao()
    {
        TipoDao tipo = new TipoDaoImp();
        return tipo;
    }

    /**
	 * Metodo que permite obtener un objeto de la clase ValoresTipoDaoImp
	 *
	 * @return retorna un objeto de la clase ValoresTipoDaoImp
	 */
    public ValoresTipoDao getValoresTipoDao()
    {
        ValoresTipoDao valores = new ValoresTipoDaoImp();
        return valores;
    }
}
